package com.geostar.constructionland.attachment.util;

import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

import java.io.File;
import java.io.IOException;

/**
 * 临时目录工具
 * @author yell
 */
@Component
public class LocalTmpPathUtil {
    private static String tmpPath;
    @Value("${tmpPath:}")
    public void setTmpPath(String tmpPath) {
        this.tmpPath = tmpPath;
    }
    public String getTmpPath(){
        if(StringUtils.isBlank(tmpPath)){
            /**获取当前临时目录**/
            tmpPath = System.getProperty("java.io.tmpdir");
            if(StringUtils.isBlank(tmpPath)){
                throw new RuntimeException("请设置临时文件目录");
            }
            tmpPath = tmpPath + File.separator;
        }
        return tmpPath;
    }

    /***
     * 获取上传文件临时上传地址
     * @param md5 附件md5码
     * @param isCreate 如果不存在是否需要创建
     * @param chunkSize 分片大小
     * @return
     */
    public String getFileTmpDirPath(String md5,int chunkSize,boolean isCreate) {
        String dirPath = getTmpPath()+File.separator+getTmpFileDirName(md5,chunkSize);
        if(isCreate) {
            File file = new File(dirPath);
            if(!file.exists()){
                file.mkdirs();
            }
        }
        return dirPath;
    }

    /***
     * 获取分片上传每片的临时文件地址
     * @param md5 附件MD5码
     * @param chunk 片号
     * @param isCreate 是否需要创建文件
     * @return 分片上传每片的临时文件地址
     */
    public String getChunkFileTempPath(String md5,int chunkSize,int chunk,boolean isCreate){
        String tmpFilePath = getFileTmpDirPath(md5,chunkSize,true)+File.separator + getChunkFileName(md5,chunk);
        if(isCreate){
            File file = new File(tmpFilePath);
            if(!file.exists()){
                try {
                    file.createNewFile();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
        return tmpFilePath;
    }



    /***
     * 获取转换文件临时文件夹
     * @param md5 附件MD5码
     * @param isCreate 是否需要创建文件
     * @return 分片上传每片的临时文件地址
     */
    public String getConvertTmpPath(String md5 ,boolean isCreate){
        String tmpFilePath = getTmpPath() + File.separator+ md5;
        if(isCreate){
            File file = new File(tmpFilePath);
            if(!file.exists()){
                try {
                    file.mkdirs();
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }
        return tmpFilePath;
    }


    /**
     * 合并分片时 获取完整的文件地址
     * @param md5
     * @param isCreate
     * @return
     */
    public String getCompleteFilePath(String md5,int chunkSize,String name,boolean isCreate){
        String cplFilePath = getFileTmpDirPath(md5,chunkSize,true)+File.separator + getCompleteFileName(name);
        if(isCreate){
            File file = new File(cplFilePath);
            if(!file.exists()){
                try {
                    file.createNewFile();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
        return cplFilePath;
    }

    /***
     * 获取分片上传每片的临时文件名
     * @return
     */
    public String getChunkFileName(String md5,int chunk){
        return md5 + "_temp_" + chunk;
    }

    /**
     * 获取合并后完成的文件名
     * @param name
     * @return
     */
    public String getCompleteFileName(String name){
        return name;
    }

    /**
     * 获取临时文件夹名称
     * @param md5 md5码
     * @param chunkSize 分片大小
     * @return
     */
    public String getTmpFileDirName(String md5,int chunkSize){
        return md5+"_"+chunkSize;
    }
}
